﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using App.Modelo.Interfaces;
using App.Persistencia;
using App.SolInf.Modelo;
using NHibernate;

namespace App.SolInf.Controlador
{
    public class ControladoraClientes : IControladora, IControladoraAbm
    {
        public ISessionActual Session { get; set; }
        public IRepositorio Repositorio { get; set; }

        public void Alta(object item)
        {
            Repositorio.SaveObject(item);
        }

        public IList<Cliente> Buscar(string Nombre, IDocumento Documento, string Domicilio)
        {

            IDictionary<string, string> param = new Dictionary<string, string>();

            string where = "";

            if (Nombre != "")
            {
                where += "(cliente.NombreFantasia like :nombre OR cliente.RazonSocial like :nombre)";
                param.Add("nombre", Nombre);
            }
            if (Documento != null)
            {
                if (where != "")
                    where += " AND ";
                where += "(cliente.Documento.Numero = :numero)";

                param.Add("numero", Documento.Numero);
            }

            if (Domicilio != "")
            {
                if (where != "")
                    where += " AND ";
                where += "(cliente.Domicilio like :domicilio";
                param.Add("domicilio", Domicilio);
            }

            if (where != "")
                where = "WHERE " + where;

            string hql = "from Cliente as cliente " + where;


            return Repositorio.GetList<Cliente>(hql, param);

        }

        public void Modificar(object item)
        {
            Repositorio.UpdateObject(item);
            Repositorio.FlushSession();
        }


        public void Baja(object item)
        {
            Repositorio.DeleteObject(item);
        }

        public ICriteria Consultar()
        {
            return ((Repositorio) Repositorio).CreateCriteria<Cliente>()
                .CreateAlias("Documento", "Documento");
        }
    }
}
